'''
题目描述：给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。有效字符串需满足：
左括号必须用相同类型的右括号闭合；左括号必须以正确的顺序闭合。
'''


def is_valid(s):
    # 创建一个字典，用于匹配右括号和对应的左括号
    mapping = {')': '(', '}': '{', ']': '['}
    # 初始化一个栈，用于存储遍历中的每一个左括号
    stack = []
    # 遍历字符串中的每个字符
    for char in s:
        # 如果字符是右括号 此处in方法,只看key是否在字典里，不看value
        if char in mapping:
            #在 top_element = stack.pop() if stack else '#' 这行中：
            #条件是 if stack：判断栈是否为空（空列表在 Python 中视为 False）
            #如果栈不为空（条件为真），则执行 stack.pop() 并将结果赋值给 top_element
            #如果栈为空（条件为假），则将 '#' 赋值给 top_element
            # 弹出栈顶元素，如果栈为空则用一个特殊值'#'代替
            top_element = stack.pop() if stack else '#'
            # 检查弹出的左括号是否与当前右括号匹配  因为要使得括号匹配，该右括号必须紧接着对上一个适配的左括号，所以，必须是用栈顶元素来尝试适配
            if mapping[char] != top_element:
                return False
        else:
            # 如果是左括号，将其压入栈中
            stack.append(char)

    # 最后栈为空则表示所有括号都正确匹配
    return not stack


# 测试示例
print(is_valid("()"))  # True
print(is_valid("()[]{}"))  # True
print(is_valid("(]"))  # False
print(is_valid("({}))"))  # False

#testMap = {'name':'lzq','age':'18'}
#print("lzq" in testMap)